package teste.dao;

import junit.framework.Assert;
import objetos.Emprestimo;
import objetos.Item;
import objetos.Usuario;

import org.junit.Before;
import org.junit.Test;

import dao.EmprestimoDAO;

public class TestEmprestimoDAO {

	private Emprestimo emprestimoUm;
	private Emprestimo emprestimoDois;
	private Emprestimo emprestimoTres;
	private EmprestimoDAO emprestimoDAO;
	
	@Before
	public void setUp() throws Exception {
		this.emprestimoUm = new Emprestimo(new Usuario("Beneficiado1", "Beneficiado Um", "Endereco Beneficiado Um"), new Usuario("Emprestador1", "Emprestador Um", "Endereco Emprestador Um"), new Item(new Usuario("Emprestador1", "Emprestador Um", "Endereco Emprestador Um"), "Item Um", "Descricao Item Um", "Jogo", 1), 5, 1);
		this.emprestimoDois = new Emprestimo(new Usuario("Beneficiado2", "Beneficiado Dois", "Endereco Beneficiado Dois"), new Usuario("Emprestador2", "Emprestador Dois", "Endereco Emprestador Dois"), new Item(new Usuario("Emprestador2", "Emprestador Dois", "Endereco Emprestador Dois"), "Item Dois", "Descricao Item Dois", "Livro", 2), 7, 2);
		this.emprestimoTres = new Emprestimo(new Usuario("Beneficiado3", "Beneficiado Tres", "Endereco Beneficiado Tres"), new Usuario("Emprestador3", "Emprestador Tres", "Endereco Emprestador Tres"), new Item(new Usuario("Emprestador3", "Emprestador Tres", "Endereco Emprestador Tres"), "Item Tres", "Descricao Item Tres", "Filme", 3), 10, 3);
		this.emprestimoDAO = new EmprestimoDAO();
		this.emprestimoDAO.cadastrar(this.emprestimoUm);
		this.emprestimoDAO.cadastrar(this.emprestimoDois);
		this.emprestimoDAO.cadastrar(this.emprestimoTres);
	}

	@Test
	public void verificaDeletarPesquisar() throws Exception{
		Assert.assertEquals(this.emprestimoUm, this.emprestimoDAO.pesquisarTodos().get(0));
		Assert.assertEquals(this.emprestimoDois, this.emprestimoDAO.pesquisarTodos().get(1));
		Assert.assertEquals(this.emprestimoTres, this.emprestimoDAO.pesquisarTodos().get(2));
		Assert.assertEquals(this.emprestimoUm, this.emprestimoDAO.pesquisar("idRequisicaoEmprestimo", "1").get(0));
		Assert.assertEquals(this.emprestimoDois, this.emprestimoDAO.pesquisar("idRequisicaoEmprestimo", "2").get(0));
		Assert.assertEquals(this.emprestimoTres, this.emprestimoDAO.pesquisar("idRequisicaoEmprestimo", "3").get(0));
		
		try{
			this.emprestimoDAO.pesquisar(null, "Chave");
			Assert.fail("Vai entrar em excecao, pois o filtro eh nulo.");
		}
		catch(Exception e){
			Assert.assertEquals("Filtro nulo", "Especifique o filtro e a chave da pesquisa.", e.getMessage());
		}
		
		try{
			this.emprestimoDAO.pesquisar("", "Chave");
			Assert.fail("Vai entrar em excecao, pois o filtro eh vazio.");
		}
		catch(Exception e){
			Assert.assertEquals("Filtro vazio", "Voce deve deve definir o filtro e a chave da pesquisa.", e.getMessage());
		}
		
		try{
			this.emprestimoDAO.pesquisar("Filtro", null);
			Assert.fail("Vai entrar em excecao, pois a chave eh nula.");
		}
		catch(Exception e){
			Assert.assertEquals("Chave nula", "Especifique o filtro e a chave da pesquisa.", e.getMessage());
		}
		
		try{
			this.emprestimoDAO.pesquisar("Filtro", "");
			Assert.fail("Vai entrar em excecao, pois o filtro eh vazia.");
		}
		catch(Exception e){
			Assert.assertEquals("Chave vazia", "Voce deve deve definir o filtro e a chave da pesquisa.", e.getMessage());
		}
	}
	
}
